package com.gusto.engine.recommend.prediction.params;

/**
 * <p>Parameters for a hybrid algorithm.</p>
 * 
 * @author amokrane.belloui@gmail.com
 *
 */
public class HybridParams {
	
	protected Integer minEvals = 1;
	
	protected String colUserFormula = "(((%DISTANCE%+1)/2) * 0.85 + (round(%COMMON%*1.0/2)/5) * 0.15 )";
	protected String colItemFormula = "(((%DISTANCE%+1)/2) * 0.85 + (round(%COMMON%/3)/7) * 0.15 )";
	
	
	protected Integer colMinEvals = 1;
	protected Integer semMinEvals = 1;
	
	protected Integer colUserMinShared = 2;
	protected Integer colItemMinShared = 2;
	
	protected Double colUserMinSimilarity = 0.1;
	protected Double colItemMinSimilarity = 0.1;
	
	protected Integer colUserMaxNeighbors = null;
	protected Integer colItemMaxNeighbors = null;
	
	protected Double semUserMinSimilarity = 0.1;
	protected Double semItemMinSimilarity = 0.1;
	
	protected Integer semUserMaxNeighbors = 75;
	protected Integer semItemMaxNeighbors = 75;
	
	
	public void setMinEvals(Integer minEvals) {
		this.minEvals = minEvals;
	}
	public void setColMinEvals(Integer colMinEvals) {
		this.colMinEvals = colMinEvals;
	}
	public void setSemMinEvals(Integer semMinEvals) {
		this.semMinEvals = semMinEvals;
	}
	public void setColUserMinShared(Integer colUserMinShared) {
		this.colUserMinShared = colUserMinShared;
	}
	public void setColItemMinShared(Integer colItemMinShared) {
		this.colItemMinShared = colItemMinShared;
	}
	public void setColUserMinSimilarity(Double colUserMinSimilarity) {
		this.colUserMinSimilarity = colUserMinSimilarity;
	}
	public void setColItemMinSimilarity(Double colItemMinSimilarity) {
		this.colItemMinSimilarity = colItemMinSimilarity;
	}
	public void setColUserMaxNeighbors(Integer colUserMaxNeighbors) {
		this.colUserMaxNeighbors = colUserMaxNeighbors;
	}
	public void setColItemMaxNeighbors(Integer colItemMaxNeighbors) {
		this.colItemMaxNeighbors = colItemMaxNeighbors;
	}
	public void setSemUserMinSimilarity(Double semUserMinSimilarity) {
		this.semUserMinSimilarity = semUserMinSimilarity;
	}
	public void setSemItemMinSimilarity(Double semItemMinSimilarity) {
		this.semItemMinSimilarity = semItemMinSimilarity;
	}
	public void setSemUserMaxNeighbors(Integer semUserMaxNeighbors) {
		this.semUserMaxNeighbors = semUserMaxNeighbors;
	}
	public void setSemItemMaxNeighbors(Integer semItemMaxNeighbors) {
		this.semItemMaxNeighbors = semItemMaxNeighbors;
	}
	public Integer getMinEvals() {
		return minEvals;
	}
	public Integer getColMinEvals() {
		return colMinEvals;
	}
	public Integer getSemMinEvals() {
		return semMinEvals;
	}
	public Integer getColUserMinShared() {
		return colUserMinShared;
	}
	public Integer getColItemMinShared() {
		return colItemMinShared;
	}
	public Double getColUserMinSimilarity() {
		return colUserMinSimilarity;
	}
	public Double getColItemMinSimilarity() {
		return colItemMinSimilarity;
	}
	public Integer getColUserMaxNeighbors() {
		return colUserMaxNeighbors;
	}
	public Integer getColItemMaxNeighbors() {
		return colItemMaxNeighbors;
	}
	public Double getSemUserMinSimilarity() {
		return semUserMinSimilarity;
	}
	public Double getSemItemMinSimilarity() {
		return semItemMinSimilarity;
	}
	public Integer getSemUserMaxNeighbors() {
		return semUserMaxNeighbors;
	}
	public Integer getSemItemMaxNeighbors() {
		return semItemMaxNeighbors;
	}
	public String getColUserFormula() {
		return colUserFormula;
	}
	public void setColUserFormula(String colUserFormula) {
		this.colUserFormula = colUserFormula;
	}
	public String getColItemFormula() {
		return colItemFormula;
	}
	public void setColItemFormula(String colItemFormula) {
		this.colItemFormula = colItemFormula;
	}
	
}
